---
title: 条形码扫描器
description: 允许您的移动应用程序使用相机扫描 QR 码、EAN-13 和其他类型的条形码。
sidebar:
  badge:
    text: New
    variant: tip
plugin: barcode-scanner
---

import PluginLinks from '@components/PluginLinks.astro';
import Compatibility from '@components/plugins/Compatibility.astro';

import { Tabs, TabItem } from '@astrojs/starlight/components';
import CommandTabs from '@components/CommandTabs.astro';

<PluginLinks plugin={frontmatter.plugin} />

允许您的移动应用程序使用相机扫描 QR 码、EAN-13 和其他类型的条形码。

## 支持的平台

<Compatibility plugin={frontmatter.plugin} />

## 设置

_这个插件要求 Rust 版本至少是 **1.64**_

请安装条形码扫描器插件。

<Tabs>
  <TabItem label="自动">

使用项目的包管理器来添加依赖。

{' '}

<CommandTabs
  npm="npm run tauri add barcode-scanner"
  yarn="yarn run tauri add barcode-scanner"
  pnpm="pnpm tauri add barcode-scanner"
  bun="bun tauri add barcode-scanner"
  cargo="cargo tauri add barcode-scanner"
/>

  </TabItem>
  <TabItem label="手动">

1. 运行 `cargo add tauri-plugin-barcode-scanner` 以将插件添加到 `Cargo.toml` 的项目依赖中。

2. 修改 `lib.rs` 来初始化插件。

```rust title="lib.rs" ins={4}
#[cfg_attr(mobile, tauri::mobile_entry_point)]
fn run() {
    tauri::Builder::default()
        .plugin(tauri_plugin_barcode_scanner::init())
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}
```

3. 使用你喜欢的 JavaScript 包管理器安装 JavaScript Guest 绑定。

  <CommandTabs
      npm="npm install @tauri-apps/plugin-barcode-scanner"
      yarn="yarn add @tauri-apps/plugin-barcode-scanner"
      pnpm="pnpm add @tauri-apps/plugin-barcode-scanner"
      bun="bun add @tauri-apps/plugin-barcode-scanner"
  />
  </TabItem>
</Tabs>

## 用法

条形码扫描器插件在 JavaScript 中可用。

```javascript
import { scan, Format } from '@tauri-apps/plugin-barcode-scanner';

// `windowed: true` 实际上将 webview 设置为透明的
// 而不是为相机打开一个单独的视图
// 确保你的用户界面已经准备好使用透明元素显示下面的内容
scan({ windowed: true, formats: [Format.QRCode] });
```

## 权限

默认情况下，所有插件命令都被阻止，无法访问。
你必须在你的 `capabilities` 配置中定义一个权限列表。

更多信息请参见[访问控制列表](/zh-cn/reference/acl/)。

```json title="src-tauri/capabilities/mobile.json"
{
  "$schema": "./schemas/mobile-schema.json",
  "identifier": "mobile-capability",
  "windows": ["main"],
  "platforms": ["iOS", "android"],
  "permissions": ["barcode-scanner:allow-scan", "barcode-scanner:allow-cancel"]
}
```

| 权限                                        | 描述                                                          |
| ------------------------------------------- | ------------------------------------------------------------- |
| `barcode-scanner:allow-cancel`              | 在没有预先配置作用域的情况下，启用 cancel 命令。              |
| `barcode-scanner:deny-cancel`               | 拒绝没有任何预先配置的作用域的 cancel 命令。                  |
| `barcode-scanner:allow-check-permissions`   | 在没有预先配置作用域的情况下，启用 check_permissions 命令。   |
| `barcode-scanner:deny-check-permissions`    | 拒绝没有任何预先配置的作用域的 check_permissions 命令。       |
| `barcode-scanner:allow-open-app-settings`   | 在没有预先配置作用域的情况下，启用 open_app_settings 命令。   |
| `barcode-scanner:deny-open-app-settings`    | 拒绝没有任何预先配置的作用域的 open_app_settings 命令。       |
| `barcode-scanner:allow-request-permissions` | 在没有预先配置作用域的情况下，启用 request_permissions 命令。 |
| `barcode-scanner:deny-request-permissions`  | 拒绝没有任何预先配置的作用域的 request_permissions 命令。     |
| `barcode-scanner:allow-scan`                | 在没有预先配置作用域的情况下，启用 scan 命令。                |
| `barcode-scanner:deny-scan`                 | 拒绝没有任何预先配置的作用域的 scan 命令。                    |
| `barcode-scanner:allow-vibrate`             | 在没有预先配置作用域的情况下，启用 vibrate 命令。             |
| `barcode-scanner:deny-vibrate`              | 拒绝没有任何预先配置的作用域的 vibrate 命令。                 |
